package lp2.projeto.agenda;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import lp2.projeto.anotacao.Anotacao;

/**
 * Modifica e visualiza os textos de uma determinada anotacao
 */
public class TextoJDialog extends JDialog {
	private static final long serialVersionUID = -3568983259945300761L;
	private Anotacao anotacao;
	private JTextArea textoJTextArea;
	private JComboBox listaTexto;
	private JTextField campoNome;
	
	/**
	 * Construtor de TextoJDialog
	 * @param anotacao Anotacao cujos sons o dialogo ira tocar
	 */
	public TextoJDialog(Anotacao anotacao) {
		setLayout(new GridBagLayout());
		
		GridBagConstraints constraints = new GridBagConstraints();
		constraints.gridwidth = 3;
		constraints.fill = GridBagConstraints.HORIZONTAL;
		
		add(new JLabel("Textos da anotacao"), constraints);
		
		textoJTextArea = new JTextArea();
		textoJTextArea.addKeyListener(new KeyListener() {
			@Override
			public void keyPressed(KeyEvent arg0) {
				modificaTexto();
			}
			private void modificaTexto() {
				Texto texto = (Texto)listaTexto.getSelectedItem();
				if (texto != null)
						texto.setConteudo(textoJTextArea.getText());
			}
			@Override
			public void keyReleased(KeyEvent arg0) {
				modificaTexto();
			}
			@Override
			public void keyTyped(KeyEvent arg0) {
				modificaTexto();
			}
		});
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weighty = 1.0;
		constraints.gridy = 1;
		add(textoJTextArea, constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.weighty = 0.0;
		
		listaTexto = new JComboBox();
		listaTexto.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				Texto texto = (Texto)listaTexto.getSelectedItem();
				
				if (texto != null) {
					textoJTextArea.setText(texto.getConteudo());
					textoJTextArea.setEnabled(true);
				} else {
					textoJTextArea.setText("");
					textoJTextArea.setEnabled(false);					
				}
			}
		});
		constraints.gridy = 2;
		constraints.gridwidth = 2;
		add(listaTexto, constraints);
		
		JButton botaoRemover = new JButton("Remover");
		botaoRemover.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				remover();	
			}
		});
		constraints.gridwidth = 1;
		constraints.gridx = 2;
		add(botaoRemover, constraints);
		
		JButton botaoAdicionar = new JButton("Adicionar");
		botaoAdicionar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				adicionar();	
			}
		});
		constraints.gridy = 3;
		constraints.gridx = 0;
		add(botaoAdicionar, constraints);
		
		campoNome = new JTextField("Insira o nome do texto");
		constraints.gridx = 1;
		constraints.weightx = 1.0;
		add(campoNome, constraints);
		
		JButton botaoVoltar = new JButton("Voltar");
		botaoVoltar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				voltar();	
			}
		});
		constraints.gridx = 2;
		add(botaoVoltar, constraints);
		
		setSize(500, 500);
		setResizable(false);
		setModal(true);
		
		setAnotacao(anotacao);
	}
	
	private void remover() {
		Texto texto = (Texto)listaTexto.getSelectedItem();
		if (texto != null) {
			listaTexto.removeItem(texto);
			anotacao.getTextos().remove(texto); //TODO: Deixar mais elegante
			listaTexto.setSelectedItem(null);
		}
	}
	
	private void adicionar() {
		Texto texto = new Texto(campoNome.getText(), "");
		anotacao.getTextos().add(texto); //TODO: Deixar mais elegante
		listaTexto.addItem(texto);
		
		
		campoNome.setText("Insira o nome do texto");
		
		listaTexto.setSelectedItem(texto);
		textoJTextArea.setText(texto.getConteudo());
	}
	
	private void voltar() {
		dispose();
	}
	
	private void setAnotacao(Anotacao anotacao) {
		this.anotacao = anotacao;
		
		textoJTextArea.setText(null);
		textoJTextArea.setEnabled(false);
		
		listaTexto.removeAllItems();
		for (Texto texto : anotacao.getTextos())
			listaTexto.addItem(texto);
	}
}
